#ifndef __SYSTEMCALL_H__
#define __SYSTEMCALL_H__

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>  
#include <netdb.h>            // struct addrinfo
#include <sys/types.h>        // needed for socket(), uint8_t, uint16_t, uint32_t
#include <sys/socket.h>       // needed for socket()
#include <netinet/in.h>       // IPPROTO_UDP, INET_ADDRSTRLEN
#include <netinet/ip.h>       // struct ip and IP_MAXPACKET (which is 65535)
#include <netinet/udp.h>      // struct udphdr
#include <arpa/inet.h>        // inet_pton() and inet_ntop()
#include <sys/ioctl.h>        // macro ioctl is defined
#include <bits/ioctls.h>      // defines values for argument "request" of ioctl.
#include <net/if.h>           // struct ifreq
#include <linux/if_ether.h>   // ETH_P_IP = 0x0800, ETH_P_IPV6 = 0x86DD
#include <linux/if_packet.h>  // struct sockaddr_ll (see man 7 packet)
#include <net/ethernet.h>

#include <errno.h>            // errno, perror()
#include<sys/wait.h>  
#include <sys/param.h>
#include <net/if_arp.h>



void Print( const char *format, ... );
int Strlen( const char *pstr );
int ThreadCreate( pthread_t *threadId, void *(*threadFunc)(void*), void *arg );
void Close( int fd );
void *Memset(void *s, int c, int n);
void *Memcpy( void *dest, const void *src, int n );
char *Strcpy( char *dest, const char *src);
int Usleep( unsigned int usec );
int Memcmp( const void *s1, const void *s2, int n );
int Socket(int domain, int type, int protocol);

int Setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
ssize_t Sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
void Sprintf(char * buf, const char *format,...);



#endif  // __DEBUG_H__

